package cn.zhuzicc.basic.jvm.t1;

/**
 * @author zhaoxiang
 * @version 1.0
 * @description
 * @Date 2021/9/19 20:37
 */
public class Demo1_23 {
    public static void main(String[] args) {
        test01();
        test02();
    }

    public static void test01() {

        String s = new String("a") + new String("b");
        /*
            堆：new String("a")  new String("b"); new String("ab")
            串池：
         */

        String s2 = s.intern();
        /*
            将这个字符串对象尝试放入串池
            1) 如果有则并不会放入
            2) 如果没有则放入串池，会把串池中的对象返回
         */

        System.out.println(s == "ab");
        System.out.println(s2 == "ab");
    }

    public static void test02() {
        String x = "ab";
        /*
            串池："ab"
         */
        String s = new String("a") + new String("b");
        /*
            串池："ab"、"a"、"b"
            堆：new String("a")、 new String("b")、new String("ab")
         */
        String s2 = s.intern();
        /*
            串池中已存在，不放入"ab"，直接返回串池中"ab"
         */
        System.out.println(s2 == x);
        /*
           串池：s2 -> "ab" , x-> "ab"，同一个引用
           所以 返回true
         */
        System.out.println(s == x);
        /*
          串池：x-> "ab"
          堆： s -> new String("ab");
          不是同一个引用，返回false
         */
    }
}
